#ifndef __FH_MSHC_PLAT_H__
#define __FH_MSHC_PLAT_H__

//need to translate to kernel sw flag.
#define MSHC_MMC_MODE_HS		(1 << 0)
#define MSHC_MMC_MODE_HS_52MHz	(1 << 1)
#define MSHC_MMC_MODE_4BIT		(1 << 2)
#define MSHC_MMC_MODE_8BIT		(1 << 3)
#define MSHC_MMC_MODE_SPI		(1 << 4)
#define MSHC_MMC_MODE_DDR_52MHz	(1 << 5)
#define MSHC_MMC_MODE_HS200_1_8V	(1 << 6)	//hs200
#define MSHC_MMC_MODE_HS200_1_2V	(1 << 7)
#define MSHC_MMC_MODE_HS200	(MSHC_MMC_MODE_HS200_1_8V | MSHC_MMC_MODE_HS200_1_2V)
#define MSHC_MMC_MODE_HS400_1_8V	(1 << 8)	//hs400 classic
#define MSHC_MMC_MODE_HS400_1_2V	(1 << 9)
#define MSHC_MMC_MODE_HS400	(MSHC_MMC_MODE_HS400_1_8V | MSHC_MMC_MODE_HS400_1_2V)
#define MSHC_MMC_MODE_HS400ES	(1 << 10)	//hs400es..

struct mshc_lite_emmc_card_info {
char *mmc_name;
char mmc_name_buf[16];
#define FORCE_USR_SETTING   0x55aaaa55
//default auto..
#define AUTO_TUNING_THEN_REC  0x0
unsigned int flag;
#define AUTO_TUNING_DONE    0x656e6f64  //means 'done'
unsigned int magic;
//cpy sw para to emmc mem..
unsigned int sup_mode;
unsigned int es_sup;
unsigned int hs_tx_data;
unsigned int hs_rx_cmd;
unsigned int hs_rx_data;
unsigned int hs200_tx_data;
unsigned int hs200_rx_cmd;
unsigned int hs200_rx_data;
unsigned int hs400_tx_data;
unsigned int hs400_rx_cmd;
unsigned int hs400_rx_data;
};

struct mshc_lite_plat_info {
struct mshc_lite_emmc_card_info *emmc_info_list;
void (*soc_clk_init)(void *p_rev);
void (*soc_ctrl_reset)(void *p_rev);
void (*clk_set)(void *p_rev, unsigned int clk);
};


#endif

